小编典典

如何在C中进行构造函数链接#

all

我知道这应该是一个超级简单的问题,但我已经为这个概念挣扎了一段时间了。
我的问题是,如何在C#中链接构造函数?
我在上第一节OOP课,所以我只是在学习。我不明白构造函数链接是如何工作的,也不知道如何实现它,甚至不知道为什么它比只做没有链接的构造函数更好。
我希望能举一些例子并加以解释。
那么如何将它们链接起来呢?
我知道有两种说法:

public SomeClass this: {0}

public SomeClass
{
    someVariable = 0
}

但是你怎么用三、四等等来做呢?
同样,我知道这是一个初学者的问题,但我正在努力理解这一点,我不知道为什么。


阅读 146

收藏
2022-05-23

共1个答案

小编典典

您可以使用标准语法(像使用方法一样使用’this’)来选择重载,
inside the class:

class Foo 
{
    private int id;
    private string name;

    public Foo() : this(0, "") 
    {
    }

    public Foo(int id, string name) 
    {
        this.id = id;
        this.name = name;
    }

    public Foo(int id) : this(id, "") 
    {
    }

    public Foo(string name) : this(0, name) 
    {
    }
}

then:

Foo a = new Foo(), b = new Foo(456,"def"), c = new Foo(123), d = new Foo("abc");

Note also:

  • you can chain to constructors on the base-type using base(...)
  • you can put extra code into each constructor
  • the default (if you don’t specify anything) is base()

For “why?”:

  • code reduction (always a good thing)
  • necessary to call a non-default base-constructor, for example:
    SomeBaseType(int id) : base(id) {...}
    

Note that you can also use object initializers in a similar way, though
(without needing to write anything):

SomeType x = new SomeType(), y = new SomeType { Key = "abc" },
         z = new SomeType { DoB = DateTime.Today };
2022-05-23